/*
 * Copyright (C) 2013 Daniel Wasilew <daniel.wasilew@codeminer.org>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.codeminer.parts.player;

import org.codeminer.database.DatabaseManager;
import org.codeminer.parts.IdentifiableNotFoundException;
import org.codeminer.parts.application.ApplicationComponent;
import org.codeminer.parts.application.ApplicationContext;
import org.codeminer.parts.application.ShutdownCallback;
import org.codeminer.parts.database.PlayerConnector;

import java.util.Collections;
import java.util.List;

/**
 * User: Daniel Wasilew <daniel.wasilew@codeminer.org>
 * Date: 21.03.13
 * Time: 07:36
 */
public class DefaultPlayerManager implements ApplicationComponent, PlayerManager {
    private List<Player> players;

    @Override
    public void startup(ApplicationContext context, ShutdownCallback shutdownCallback) throws Exception {
        DatabaseManager databaseManager = context.getApplicationPart(DatabaseManager.class);
        PlayerConnector playerConnector = databaseManager.getConnector(PlayerConnector.class);
        this.players = playerConnector.findAll();
    }

    @Override
    public void addPlayer(Player player) {
        this.players.add(player);
    }

    @Override
    public void removePlayer(Player player) {
        this.players.remove(player);
    }

    @Override
    public Player getPlayer(Long playerId) {
        for (Player player : players) {
            if (player.getOid() == playerId)
                return player;
        }
        throw new IdentifiableNotFoundException(playerId);
    }

    @Override
    public List<Player> getAllPlayers() {
        return Collections.unmodifiableList(players);
    }

    @Override
    public void shutdown() {
    }

    @Override
    public Class getDescriptionClass() {
        return PlayerManager.class;
    }
}
